package com.ipzoe.common.controller.admin;

import com.ipzoe.common.bean.entity.Admin;
import com.ipzoe.common.bean.entity.AdminMenu;
import com.ipzoe.common.bean.entity.Role;
import com.ipzoe.common.bean.response.PageBean;
import com.ipzoe.common.bean.response.Response;
import com.ipzoe.common.bean.vo.RoleMenuVO;
import com.ipzoe.common.service.AdminMenuService;
import com.ipzoe.common.service.RoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;

import java.util.List;

/**
 * 后台角色管理控制器
 * <p>
 * Created 2018/01/19.
 *
 * @author pfzhang
 */
@Api(description = "后台角色管理控制器")
@RestController("roleController")
@RequestMapping("/admin/role")
public class RoleController {

    @Autowired
    private RoleService roleService;

    @Autowired
    private AdminMenuService adminMenuService;

    /**
     * 查询角色集合
     *
     * @param key  搜索关键词,根据角色名称查询
     * @param page 当前页
     * @param size 页面大小
     * @return 角色集合分页对象
     */
    @ApiOperation("查询角色集合")
    @PostMapping("/list")
    public Response<PageBean<Role>> list(@ApiParam("搜索关键词,根据角色名称查询") @RequestParam(defaultValue = "") String key,
                                         @ApiParam("分页页码") @RequestParam(required = false, defaultValue = "1") int page,
                                         @ApiParam("每页数量") @RequestParam(required = false, defaultValue = "10") int size) {
        return roleService.list(key, page, size);
    }

    /**
     * 添加/编辑角色
     *
     * @param role 角色对象,没有ID为添加,否则为编辑
     * @return 接口响应对象
     * @@param admin  管理员
     */
    @ApiOperation("添加/编辑角色")
    @PostMapping("/saveOrUpdateRole")
    public Response saveOrUpdateRole(@ApiIgnore Admin admin,
                                     @ApiParam("角色对象,没有ID为添加,否则为编辑") @RequestBody Role role) {
        return roleService.saveOrUpdateRole(admin, role);
    }

    /**
     * 后台管理添加角色时获取菜单列表数据(去除首页管理),若传角色ID,则还会返回角色信息和角色拥有菜单
     *
     * @param roleId 角色ID
     * @return 角色/菜单VO
     */
    @ApiOperation("后台管理添加角色时获取菜单列表数据(去除首页管理),若传角色ID,则还会返回角色信息和角色拥有菜单")
    @PostMapping("/selectAdminMenu")
    public Response<RoleMenuVO> selectAdminMenu(@ApiParam("角色ID") @RequestParam(required = false) Long roleId) {
        RoleMenuVO roleMenuVO = new RoleMenuVO();
        List<AdminMenu> list = adminMenuService.selectAllNotIndex();
        roleMenuVO.setMenuList(list);

        if (null != roleId) {
            Role role = roleService.getRoleDetailById(roleId);
            roleMenuVO.setRole(role);
        }
        return Response.ok(roleMenuVO);
    }
}
